﻿Public Class frmItemDetail

#Region "Method"

#Region "Overrides"

    ''' <summary>
    ''' Sub đưa dữ liệu hiển thị trên control
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Protected Overrides Sub BindingControl()
        With BusinessObject.dsFMS.Item
            LoadCategory()
            txtItemAlias.DataBindings.Add("Text", bsFMS, .ItemAliasColumn.ColumnName)
            txtItemName.DataBindings.Add("Text", bsFMS, .ItemNameColumn.ColumnName)
            txtUnit.DataBindings.Add("Text", bsFMS, .ItemUnitColumn.ColumnName)
            txtManufacture.DataBindings.Add("Text", bsFMS, .ItemManufactureColumn.ColumnName)
            txtDescription.DataBindings.Add("Text", bsFMS, .ItemDescriptionColumn.ColumnName)
            If ActionMode <> clscommon.ActionMode.Add Then
                cboCategory.Value = bsFMS.Current(.CategoryIDColumn.ColumnName)
                cboSubCategory.Value = bsFMS.Current(.SubCategoryIDColumn.ColumnName)
                LoadShipmentDetail()
            End If
        End With
    End Sub

    ''' <summary>
    ''' Sub xóa binding dữ liệu trên control
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Protected Overrides Sub ClearDataBingding()
        With Me
            .txtItemAlias.DataBindings.Clear()
            .txtItemName.DataBindings.Clear()
            .txtUnit.DataBindings.Clear()
            .txtManufacture.DataBindings.Clear()
            .txtDescription.DataBindings.Clear()
        End With
    End Sub

    ''' <summary>
    ''' Sub set thuộc tính cho các control là read only hay không
    ''' </summary>
    ''' <param name="isReadOnly">Ở chế độ read only thì đặt là true và ngược lại</param>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Protected Overrides Sub SetControlEditable(ByVal isReadOnly As Boolean)
        MyBase.SetControlEditable(isReadOnly)
        With Me
            .txtItemAlias.ReadOnly = isReadOnly
            .txtItemName.ReadOnly = isReadOnly
            .cboCategory.ReadOnly = isReadOnly
            .cboSubCategory.ReadOnly = isReadOnly
            .cboCategory.ButtonsRight(0).Visible = Not isReadOnly
            .txtUnit.ReadOnly = isReadOnly
            .txtManufacture.ReadOnly = isReadOnly
            .txtDescription.ReadOnly = isReadOnly
            If ActionMode = clscommon.ActionMode.Add Then
                If cboCategory.Items.Count > 0 Then
                    cboCategory.SelectedIndex = 0
                    LoadSubCategory()
                Else
                    cboCategory.Clear()
                End If
                BusinessObject.dsFMS.ShipmentDetail.Clear()
            End If
        End With
    End Sub

    ''' <summary>
    ''' Sub xác định vị trí của bản ghi hiện thời và load lại dữ liệu
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Protected Overrides Sub RefreshData()
        MyBase.RefreshData()
        If Not IsNothing(bsFMS.Current) And ActionMode <> clscommon.ActionMode.Add Then
            cboCategory.Value = bsFMS.Current(BusinessObject.dsFMS.Category.CategoryIDColumn.ColumnName)
            cboSubCategory.Value = bsFMS.Current(BusinessObject.dsFMS.SubCategory.SubCategoryIDColumn.ColumnName)
            LoadShipmentDetail()
        End If
    End Sub

    ''' <summary>
    ''' Sub đặt giá trị cho các trường trước khi lưu dữ liệu
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 26/10/2010</remarks>
    Protected Overrides Sub SetDataValue()
        BusinessObject.CurrentRow(BusinessObject.dsFMS.Category.CategoryIDColumn.ColumnName) = cboCategory.Value
        If cboSubCategory.Value = Nothing Then
            BusinessObject.CurrentRow(BusinessObject.dsFMS.SubCategory.SubCategoryIDColumn.ColumnName) = DBNull.Value
        Else
            BusinessObject.CurrentRow(BusinessObject.dsFMS.SubCategory.SubCategoryIDColumn.ColumnName) = cboSubCategory.Value
        End If
    End Sub

    ''' <summary>
    ''' Hàm lưu dữ liệu vào database (add hoặc edit)
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Protected Overrides Sub SaveData()
        With BusinessObject
            If .CheckAvailable(.dsFMS.Item.ItemAliasColumn.ColumnName, .CurrentRow) Then
                If .CheckAvailable(.dsFMS.Item.ItemNameColumn.ColumnName, .CurrentRow) Then
                    MyBase.SaveData()
                Else
                    clscommon.ShowInformation(String.Format(My.Resources.DuplicateError, My.Resources.CheckItemName))
                End If
            Else
                clscommon.ShowInformation(String.Format(My.Resources.DuplicateError, My.Resources.CheckItemAlias))
            End If
        End With
    End Sub
#End Region

    ''' <summary>
    ''' Sub lấy dữ liệu từ bảng Category đưa vào dataset và hiển thị trên cboCategory
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Private Sub LoadCategory()
        With BusinessObject
            .dsFMS.Category.Clear()
            .GetTableData(.dsFMS.Category.TableName)
            cboCategory.DataSource = .dsFMS.Category
            cboCategory.DisplayMember = .dsFMS.Category.CategoryNameColumn.ColumnName
            cboCategory.ValueMember = .dsFMS.Category.CategoryIDColumn.ColumnName
            If cboCategory.Items.Count > 0 Then
                cboCategory.SelectedIndex = 0
                LoadSubCategory()
            Else
                cboCategory.Clear()
            End If
        End With
    End Sub

    ''' <summary>
    ''' Sub lấy dữ liệu từ bảng SubCategory đưa vào dataset và hiển thị trên cboSubCategory
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 24/10/2010</remarks>
    Private Sub LoadSubCategory()
        With BusinessObject
            .dsFMS.SubCategory.Clear()
            .GetDataByValue(.dsFMS.SubCategory.TableName, .dsFMS.SubCategory.CategoryIDColumn.ColumnName, cboCategory.Value)
            cboSubCategory.DataSource = .dsFMS.SubCategory
            cboSubCategory.DisplayMember = .dsFMS.SubCategory.SubCategoryNameColumn.ColumnName
            cboSubCategory.ValueMember = .dsFMS.SubCategory.SubCategoryIDColumn.ColumnName
            If cboSubCategory.Items.Count > 0 Then
                cboSubCategory.SelectedIndex = 0
            Else
                cboSubCategory.Clear()
            End If
        End With
    End Sub

    ''' <summary>
    ''' Sub đưa danh sách các loại giá của sản phẩm lên grdShipmentList
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 05/07/2010</remarks>
    Private Sub LoadShipmentDetail()
        With BusinessObject
            .dsFMS.ShipmentDetail.Clear()
            .GetDataByValue(.dsFMS.ShipmentDetail.TableName, .dsFMS.ShipmentDetail.ItemIDColumn.ColumnName, bsFMS.Current(.dsFMS.Item.ItemIDColumn.ColumnName))
            grdShipmentList.DataSource = .dsFMS
            grdShipmentList.DataMember = .dsFMS.ShipmentDetail.TableName
        End With
    End Sub
#End Region

#Region "Event"

    ''' <summary>
    ''' Hiện form thêm chủng loại khi bấm vào nút thêm chủng loại trên cboCategory
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks>Nguyễn Huy Thường added on 15/08/2011</remarks>
    Private Sub cboCategory_EditorButtonClick(sender As System.Object, e As Infragistics.Win.UltraWinEditors.EditorButtonEventArgs) Handles cboCategory.EditorButtonClick
        Try
            If e.Button.Key = "NewCategory" Then
                Using addCategory As New dlgNewCategory() With {.Owner = Me, .BusinessObject = Me.BusinessObject}
                    Dim currentCategory As String = cboCategory.Text
                    addCategory.ShowDialog()
                    If Not String.IsNullOrEmpty(addCategory.CategoryName) Then
                        BusinessObject.dsFMS.Category.Clear()
                        LoadCategory()
                        If ActionMode <> clscommon.ActionMode.View Then
                            cboCategory.Text = addCategory.CategoryName
                        Else
                            cboCategory.Text = currentCategory
                        End If
                    End If
                End Using
            End If
        Catch ex As Exception
            clscommon.ShowException(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Khi giá trị hiện thời của cboCategory thay đổi thì load danh sách SubCategory
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks>Nguyễn Huy Thường added on 17/08/2011</remarks>
    Private Sub cboCategory_ValueChanged(sender As System.Object, e As System.EventArgs) Handles cboCategory.ValueChanged
        Try
            LoadSubCategory()
        Catch ex As Exception
            clscommon.ShowException(ex.Message)
        End Try
    End Sub
#End Region
End Class